package ar.com.age.distribuidora.dominio;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="FacturaVenta")
public class FacturaVenta {
	@Id
	  @Column(name = "FacturaVenta_id")
	  @SequenceGenerator(name = "seq_FacturaVenta", sequenceName = "seq_FacturaVenta", allocationSize = 1)
	  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_FacturaVenta")
	private Long id;
	
	@Column(name = "codigo")
	private String codigo;
	
	@Column(name = "comentario")
	private String comentario;
	
	@Column(name = "estado")
	private String estado;
	
	@Column(name = "fecha")
	@Temporal(TemporalType.DATE)
	private Date fecha;
		
	@Column(name = "ganancia")
	private Double ganancia;
	
	@Column(name = "saldo")
	private Double saldo;
	
	@Column(name = "tipo")
	private String tipo;
	
	@Column(name = "total")
	private Double total;

	@ManyToOne
	@JoinColumn(name="fk_cliente_id")
	private Cliente cliente;
	
	@OneToMany(cascade = CascadeType.REMOVE)
	private List<LineaFactura> lineasFactura;
	
	@ManyToOne
	@JoinColumn(name="fk_vendedor_id")
	private Vendedor vendedor;
	
	@OneToMany
	private List<Cobro> cobros;
	
	/*@OneToOne
	private Empleado empleadoDeVenta;*/
	@Column(name = "empleadoDeVenta")
	private String empleadoDeVenta;
	
	public FacturaVenta(){
		
		this.cobros = new ArrayList<Cobro>();
		this.lineasFactura =  new ArrayList<LineaFactura>();
	}
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getComentario() {
		return comentario;
	}

	public void setComentario(String comentario) {
		this.comentario = comentario;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public Double getGanancia() {
		return ganancia;
	}

	public void setGanancia(Double ganancia) {
		this.ganancia = ganancia;
	}

	public Double getSaldo() {
		return saldo;
	}

	public void setSaldo(Double saldo) {
		this.saldo = saldo;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	public Double getTotal() {
		return total;
	}

	public void setTotal(Double total) {
		this.total = total;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<LineaFactura> getLineasFactura() {
		return lineasFactura;
	}

	public void setLineasFactura(List<LineaFactura> lineasFactura) {
		this.lineasFactura = lineasFactura;
	}

	public Vendedor getVendedor() {
		return vendedor;
	}

	public void setVendedor(Vendedor vendedor) {
		this.vendedor = vendedor;
	}

	public List<Cobro> getCobros() {
		return cobros;
	}

	public void setCobros(List<Cobro> cobros) {
		this.cobros = cobros;
	}

	public void agregarCobro(Cobro cobro){
		
		this.cobros.add(cobro);
	}
	
	public void agregarLineaFactura(LineaFactura linea){
		
		this.lineasFactura.add(linea);
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getEmpleadoDeVenta() {
		return empleadoDeVenta;
	}

	public void setEmpleadoDeVenta(String empleadoDeVenta) {
		this.empleadoDeVenta = empleadoDeVenta;
	}

	/*public Empleado getEmpleadoDeVenta() {
		return empleadoDeVenta;
	}

	public void setEmpleadoDeVenta(Empleado empleadoDeVenta) {
		this.empleadoDeVenta = empleadoDeVenta;
	}*/
	
}
